import React, { useEffect } from "react";

// 解析反解析url
// decodeURI函数能解码由encodeURI 创建或其它流程得到的统一资源标识符（URI）
// encodeURI()函数通过将特定字符的每个实例替换为转义序列来对统一资源标识符(URI)进行编码URI
// decodeURIComponent方法用于解码由 encodeURIComponent 方法或者其它类似方法编码的部分统一资源标识符（URI）
// encodeURIComponent函数通过将表示字符的 UTF-8 编码的转义序列替换某些字符的每个实例来编码 URI
// encodeURI不会编译有些httpURL中的预留符号，而encodeURIComponent会编译

// FileReader
// 用来读取File和Blob数据
// readAsArrayBuffer读取arrayBuffer
// readAsDataURL读取base64

// blob(其实可以和file对比)
// blob表示类文件对象（不可变,原始数据）可以是文本或者二进制类型，文件就是基于blob数据的
// new Blob(['<a id="a"><b id="b">hey!</b></a>'], {type : 'text/html', endings: 'transparent'})创建blob对象可指定类型
// 是一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的 Array
// silce截取blob对象的一段
// stream使用流的形式读取blob
// text获取blob的utf-8格式的内容
// arrayBuffer获取二进制

// base64
// 二进制到文本的编码规则，ASCII 字符串的格式表示
// atob函数能够解码通过 base-64 编码的字符串数据
// btoa函数能够从二进制数据“字符串”创建一个 base-64 编码的 ASCII 字符串

// ArrayBuffer（操作二进制）
// 对象用来表示通用的、固定长度的原始二进制数据缓冲区。
// 来源本地文件，base64字符串，接口请求的数据
// 只能通过dataView和类数组对象（Int8Array，Uint8Array之类的）

// base64转arraybuffer
function base64ToArrayBuffer(base64: string) {
  var binary_string = window.atob(base64);
  var len = binary_string.length;
  var bytes = new Uint8Array(len);
  for (var i = 0; i < len; i++) {
    bytes[i] = binary_string.charCodeAt(i); // 表示给定索引处的 UTF-16 编码单元表示的 Unicode 码点
  }
  return bytes.buffer;
}

// base64转文件
function baseToFile(base64: string, name: string) {
  let str = base64.split(",");
  let mime = (str[0] || "").match(/:(.*?);/);
  let bstr = atob(str[1]);
  let n = bstr.length;
  let u8arr = new Uint8Array(n);
  for (let i = 0; i < n; i++) {
    u8arr[i] = bstr.charCodeAt(i);
  }
  return (
    mime &&
    mime[0] &&
    new File([u8arr], name, {
      type: mime[0],
    })
  );
}

// base64转blob -->> base64转arrayBuffer -->> arrayBuffer转blob

// ArrayBuffer转base64
function arrayBufferToBase64(buffer: Buffer) {
  let binaryStr = "";
  const bytes = new Uint8Array(buffer);
  for (let i = 0, len = bytes.byteLength; i < len; i++) {
    binaryStr += String.fromCharCode(bytes[i]); // 将 Unicode 编码转为一个字符
  }
  return window.btoa(binaryStr);
}

// ArrayBuffer转blob
function arrayBufferToBlob(arrayBuffer: Buffer) {
  new Blob([arrayBuffer], {
    type: "text/html" as string,
    endings: "transparent",
  });
}

// blob转base64
function blobToBase64(blob: Blob) {
  var reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onloadend = function () {
    var base64data = reader.result;
  };
}

// blob转文件
function blobToFile(blobData: Blob) {
  let reader = new FileReader(); // 创建读取文件对象
  reader.readAsText(blobData, "utf-8");
  reader.onload = (e) => console.log(e);
}

// Blob,File下载转成内存链接
function getBlob(Data: Blob | File) {
  let href = URL.createObjectURL(Data);
  download(href, "name");
  URL.revokeObjectURL(href);
}

const download = (url: string, name: string) => {
  let a = document.createElement("a");
  a.href = url;
  a.download = name;
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

export default () => {
  useEffect(() => {}, []);

  return <div>
  </div>;
};
